package ade.prime.activity;

import ade.prime.activity.adapter.NotifyListAdapter;
import ade.prime.model.AdeWebOptions;
import ade.prime.model.Schedule;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ListView;
import android.widget.TextView;

import com.actionbarsherlock.app.ActionBar;

public class NotifySelectList extends AdeWebActivity 
implements OnClickListener{
	
	protected NotifyListAdapter adapter ;
	
	/**
	 * Initialise la vue.
	 * @param savedInstanceState 
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// Fixe le thème de la page
		this.setTheme(AdeWebOptions.getTheme(this)) ;
		// Ajoute un sous-titre à la barre d'action
		ActionBar bar = this.getSupportActionBar() ;
		bar.setSubtitle(R.string.NotifySelectList_subtitle) ;
		// Change l'icone de la barre d'action
		bar.setIcon(R.drawable.ic_launch_settings) ;

		this.setContentView(R.layout.notify_select_list) ;
		
		this.init() ;
	}// onCreate(Bundle)
	
	@Override
	protected ServiceConnection getServiceConnection() {
		return new ServiceConnectionAdapter(this) ;
	}// getServiceConnection()

	public void init() {
		ListView list = (ListView) this.findViewById(R.id.list) ; 
		list.setEmptyView(this.findViewById(R.id.empty)) ;

		TextView addSchedule = (TextView) this.findViewById(R.id.add_schedule) ;
		addSchedule.setOnClickListener(this) ;
		this.adapter =	new NotifyListAdapter(this, this) ;
		list.setAdapter(this.adapter) ;
	}// init()

	/**
	 * Gère le click sur le texte de création d'un emploi du temps affiché
	 * lorsqu'il n'y a pas d'emploi du temps.
	 */
	@Override
	public void onClick(View v) {
		Intent intent = new Intent(this, CreateSchedule.class) ;
		this.startActivity(intent) ;
	}// onClick(View)
	
	/**
	 * Met à jour les données l'emploi du temps.
	 * @throws RemoteException 
	 */
	public void updateScheduleNotify(Schedule updatedSchedule) throws RemoteException {
		this.serviceApi.updateScheduleNotify(updatedSchedule) ;
	}// updateScheduleNotify(Schedule)
	
	protected class ServiceConnectionAdapter 
	extends AdeWebActivity.ServiceConnectionAdapter {

		protected ServiceConnectionAdapter(AdeWebActivity activity) {
			super(activity) ;
		}// ServiceConnectionAdapter(AdeWebFragmentActivity)

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			super.onServiceConnected(name, service) ;
			try {
				((NotifySelectList) this.activity).adapter.setSchedules(
						this.activity.serviceApi.getAllSchedules()) ;
			} catch (RemoteException re) {
				// TODO: handle exception
				Log.d(TAG, "Error while retrieving all the schedules", //$NON-NLS-1$ 
						re) ;
			}// try
		}// onServiceConnected(ComponentName, IBinder)

	}// class ServiceConnectionAdapter

}// class NotifySelectList